﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Campeonato.Model;
using Campeonato.Common;
using Campeonato.Common.BLL;
using System.Threading;

namespace Campeonato
{
    public partial class FormMain : Form
    {
        public Model.Campeonato CampeonatoCarregado { get; set; }
        List<Panel> m_panelsDoForm = new List<Panel>();
        int m_contadorRodada = 0;
        int m_contadorGrupos = 0;
        bool isFinais = false;

        public FormMain()
        {
            InitializeComponent();
            AdicionaPanelsNaLista();

            //PopulaTeste();
        }

        //private void PopulaTeste()
        //{
        //                IList<Campeonato.Model.Campeonato> lst = DBHelper.Instance.DataBase.Query<Campeonato.Model.Campeonato>();
        //    Campeonato.Model.Campeonato camp = lst[0];

        //    CampeonatoBLL.CadastraCampeonato(camp);

        //    lst = CampeonatoBLL.BuscarTodosCampeonatos();

        //    camp = lst[0];

        //    IList<Jogador> lstJog = DBHelper.Instance.DataBase.Query<Jogador>();

        //    foreach (var jog in lstJog)
        //    {
        //        JogadorBLL.CadastrarJogador(camp, jog);
        //    }

        //    IList<Partida> lstPart = DBHelper.Instance.DataBase.Query<Partida>().OrderBy(f => f.Rodada).ToList();

        //   lstJog = JogadorBLL.BuscarJogadores(camp);

        //    foreach (var part in lstPart)
        //    {
        //        part.Jogador1 = lstJog.Where(j => j.Nome == part.NomeJogador1).First();
        //        part.Jogador2 = lstJog.Where(j => j.Nome == part.NomeJogador2).First();
        //        part.GolsJogador1 = null;
        //        part.GolsJogador2 = null;

        //        if (part.Data == DateTime.MinValue.Date)
        //        {
        //            part.Data = new DateTime(2012, 04, 02);
        //        }

        //        if (part.Rodada < 12)
        //        {
        //            PartidaBLL.CadastrarPartida(camp, part);
        //        }
        //        else
        //        {
        //            IList<Partida> lstPart2 = PartidaBLL.BuscarPartidasPorRodada(camp, part.Rodada);
        //            Partida p2 = lstPart2.Where(p => p.NomeJogador1 == part.NomeJogador1).First();
        //            part.ID = p2.ID;
        //            DateTime d = new DateTime(2012, 02, 04);
        //            if (part.Data < d)
        //            {
        //                part.Data = new DateTime(2012, 04, 02);
        //            }
        //            PartidaBLL.RegistraPlacar(camp, part);
        //        }
        //    }
        //}

        #region Panel Cadastra Campeonato

        private void chkDefinirCriteriosPontuacao_CheckedChanged(object sender, EventArgs e)
        {
            this.groupBoxCriteriosCamp.Visible = this.chkDefinirCriteriosPontuacao.Checked;
        }

        private void btnSalvarCadastroCampeonato_Click(object sender, EventArgs e)
        {
            Campeonato.Model.Campeonato camp = new Campeonato.Model.Campeonato();
            camp.DataInicio = this.dtpDataInicioCampeonato.Value.Date;
            camp.Nome = this.tbxNomeCampeonato.Text;
            camp.ControlarCartaoJogadores = this.chkUtilizarCadastroCartoes.Checked;

            if (this.chkDefinirCriteriosPontuacao.Checked)
            {
                camp.CriterioCampeonato = new CriterioPontos();
                camp.CriterioCampeonato.PontosEmpate = int.Parse(this.tbxNumPontosEmpate.Text);
                camp.CriterioCampeonato.PontosVitoria = int.Parse(this.tbxNumPontosVitorias.Text);
                camp.CriterioCampeonato.UsarCartaoComoDesempate = this.chkUsarCartaoDesempate.Checked;
            }

            if (this.rdbPontosCorridosUmTurno.Checked)
            {
                camp.EstiloCampeonato = TipoCampeonato.PONTOS_CORRIDOS_UM_TURNO;
                this.VerificaCriterioRebaixamento(camp);
            }
            else if (this.rdbPontosCorridosDoisTurnos.Checked)
            {
                camp.EstiloCampeonato = TipoCampeonato.PONTOS_CORRIDOS_DOIS_TURNOS;
                this.VerificaCriterioRebaixamento(camp);
            }
            else if(this.rdbPontosCorridosUmTurnoFinais.Checked)
            {
                camp.EstiloCampeonato = TipoCampeonato.PONTOS_CORRIDOS_UM_TURNO_COM_FINAIS;
                this.VerificaCriterioClassificacaoFinais(camp);
                this.VerificaCriterioRebaixamento(camp);
            }
            else if (this.rdbPontosCorridosDoisTurnoFinais.Checked)
            {
                camp.EstiloCampeonato = TipoCampeonato.PONTOS_CORRIDOS_DOIS_TURNOS_COM_FINAIS;
                this.VerificaCriterioClassificacaoFinais(camp);
                this.VerificaCriterioRebaixamento(camp);
            }
            else if (this.rdbCopaMundo.Checked)
            {
                camp.EstiloCampeonato = TipoCampeonato.COPA_DO_MUNDO;
            }
            else if (this.rdbLibertadores.Checked)
            {
                camp.EstiloCampeonato = TipoCampeonato.LIBERTADORES;
            }

            CampeonatoBLL.CadastraCampeonato(camp);

            CampeonatoCarregado = camp;

            AtualizaLabelCampeonatoCarregado();

            MessageBox.Show("Campeonato salvo com sucesso.");

            this.pnlCadastroCampeonato.Visible = false;
        }

        private void VerificaCriterioClassificacaoFinais(Model.Campeonato camp)
        {
            if (this.rdbSemiFinais.Checked)
            {
                camp.QtdeTimesClassificadosFinais = TipoFinaisPontosCorridos.SEMI;
            }
            else if (this.rdbQuartasFinais.Checked)
            {
                camp.QtdeTimesClassificadosFinais = TipoFinaisPontosCorridos.QUARTAS;
            }
            else if (this.rdbOitavasFinais.Checked)
            {
                camp.QtdeTimesClassificadosFinais = TipoFinaisPontosCorridos.OITAVAS;
            }
        }

        private void VerificaCriterioRebaixamento(Model.Campeonato _camp)
        {
            if (this.chkCriterioRebaixamento.Checked)
            {
                _camp.QtdeTimesRebaixados = short.Parse(this.tbxQtdeTimesRebaixados.Text);
            }
        }

        private void btnCancelarCadastroCampeonato_Click(object sender, EventArgs e)
        {
            LimpaCamposCadastroCampeonato();
            this.pnlCadastroCampeonato.Visible = false;
        }

        private void LimpaCamposCadastroCampeonato()
        {
            this.tbxNomeCampeonato.Text = "";
            this.tbxNumPontosEmpate.Text = "1";
            this.tbxNumPontosVitorias.Text = "3";
            this.chkDefinirCriteriosPontuacao.Checked = false;
            this.dtpDataInicioCampeonato.Value = DateTime.Today;
        }

        #endregion

        #region Panel Carrega Campeonato

        private void AtualizaLabelCampeonatoCarregado()
        {
            if (CampeonatoCarregado != null)
            {
                lblCampeonatoCarregado.Text = CampeonatoCarregado.Nome + " - " + CampeonatoCarregado.DataInicio.ToString("dd/MM/yyyy");
            }
            else
            {
                lblCampeonatoCarregado.Text = "Nenhum campeonato carregado";
            }
        }

        private void dgvCampeonatosCarregados_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                IList<Campeonato.Model.Campeonato> lst = (IList<Campeonato.Model.Campeonato>)this.srcCampeonatosCarregados.DataSource;
                CampeonatoCarregado = lst[e.RowIndex];
                this.pnlSelecionaCampeonato.Visible = false;
                AtualizaLabelCampeonatoCarregado();
                if (!CampeonatoCarregado.Finalizado)
                {
                    LiberaMenusCadastro();
                }
            }
        }

        private void btnCancelarCarregamentoCampeonato_Click(object sender, EventArgs e)
        {
            this.pnlSelecionaCampeonato.Visible = false;
            AtualizaLabelCampeonatoCarregado();
        }

        #endregion

        #region Panel Cadastra Participantes

        private void btnCadastrarParticipante_Click(object sender, EventArgs e)
        {
            FrmNovoParticipante novoParticipanteDialog = new FrmNovoParticipante();
            DialogResult resultado = novoParticipanteDialog.ShowDialog();

            if (resultado != DialogResult.Cancel)
            {
                JogadorBLL.CadastrarJogador(CampeonatoCarregado, novoParticipanteDialog.JogadorCadastrado);
                this.CarregaGridJogadoresParticipantes();
                this.srcJogadoresParticipantes.ResetBindings(false);
            }

        }

        private void CarregaGridJogadoresParticipantes()
        {
            this.srcJogadoresParticipantes.DataSource = JogadorBLL.BuscarJogadores(CampeonatoCarregado);
        }

        private void btnFecharParticipantes_Click(object sender, EventArgs e)
        {
            this.pnlCadastrarParticipantes.Visible = false;
        }

        #endregion

        #region Panel Cadastra Partidas Manualmente

        private void CarregaGridPartidasParaCadastro()
        {
            this.AtualizaTituloRodadaCadastroPartida(1);
            m_contadorRodada = 1;
            this.AtualizaLabelStatusCadastroPartida(m_contadorRodada, CampeonatoCarregado.QuantidadeRodadas);
            this.btnRodadaProximo.Enabled = true;

            this.srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, m_contadorRodada);
        }

        private void AtualizaLabelStatusCadastroPartida(int _contadorAtual, int _total)
        {
            this.lblStatusRodada.Text = string.Format("Rodada {0} de {1}", _contadorAtual, _total);
        }

        private void AtualizaTituloRodadaCadastroPartida(int _contador)
        {
            this.lblTituloRodada.Text = string.Format("Rodada {0}", _contador);
        }

        private void btnRodadaAnterior_Click(object sender, EventArgs e)
        {
            this.m_contadorRodada--;
            this.btnRodadaProximo.Enabled = true;

            if (m_contadorRodada == 1)
            {
                this.btnRodadaAnterior.Enabled = false;
            }

            this.AtualizaLabelStatusCadastroPartida(m_contadorRodada, CampeonatoCarregado.QuantidadeRodadas);
            this.AtualizaTituloRodadaCadastroPartida(m_contadorRodada);

            this.srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, m_contadorRodada);
            this.srcPartidasCadastradas.ResetBindings(false);
        }

        private void btnRodadaProximo_Click(object sender, EventArgs e)
        {
            this.m_contadorRodada++;
            this.btnRodadaAnterior.Enabled = true;

            if (m_contadorRodada == CampeonatoCarregado.QuantidadeRodadas)
            {
                this.btnRodadaProximo.Enabled = false;
            }

            this.AtualizaLabelStatusCadastroPartida(m_contadorRodada, CampeonatoCarregado.QuantidadeRodadas);
            this.AtualizaTituloRodadaCadastroPartida(m_contadorRodada);

            this.srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, m_contadorRodada);
            this.srcPartidasCadastradas.ResetBindings(false);
        }

        private void btnAdicionarPartida_Click(object sender, EventArgs e)
        {
            if (!isFinais)
            {
                ExibeFormCadastraNovaPartida();
            }
            else
            {
                ExibeFormCadastraPartidasFinais();
            }
        }

        private void ExibeFormCadastraPartidasFinais()
        {
            IList<Partida> partidas =
                PartidaBLL.BuscarJogosFinais(CampeonatoCarregado);

            foreach (Partida p in partidas)
            {
                FrmNovoConfronto frmNovoConfronto = new FrmNovoConfronto(CampeonatoCarregado.ID, p);
                DialogResult resultadoFrmConfronto = frmNovoConfronto.ShowDialog();
                if (resultadoFrmConfronto == DialogResult.OK)
                {
                    PartidaBLL.CadastrarPartida(CampeonatoCarregado, frmNovoConfronto.PartidaCriada);
                    this.btnAdicionarPartida.Enabled = false;
                }
            }

            this.srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, m_contadorRodada);
            this.srcPartidasCadastradas.ResetBindings(false);
        }

        private void btnFecharCadastroManualPartidas_Click(object sender, EventArgs e)
        {
            this.pnlCadastroPartidas.Visible = false;
        }

        private void dgvPartidasCadastradas_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                IEnumerable<Partida> partidas = (IEnumerable<Partida>)this.srcPartidasCadastradas.DataSource;
                //PartidaBLL.ExcluirPartida(CampeonatoCarregado, partidas.ElementAt(e.RowIndex));

                ExibeFormCadastraNovaPartida();
            }
        }

        private void ExibeFormCadastraNovaPartida()
        {
            if (!isFinais)
            {
                var js = JogadorBLL.BuscarJogadoresDisponiveisPorRodada(CampeonatoCarregado, m_contadorRodada);
                var frmNovoConfronto = new FrmNovoConfronto(CampeonatoCarregado.ID, js, m_contadorRodada);
                var resultadoFrmConfronto = frmNovoConfronto.ShowDialog();
                if (resultadoFrmConfronto == DialogResult.OK)
                {
                    PartidaBLL.CadastrarPartida(CampeonatoCarregado, frmNovoConfronto.PartidaCriada);
                    srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, m_contadorRodada);
                    srcPartidasCadastradas.ResetBindings(false);
                }
            }
        }

        #endregion

        #region Panel Cadastrar os Placares

        private void mnuItemRegistrarPlacares_Click(object sender, EventArgs e)
        {
            this.srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, 1);
            
            m_contadorRodada = 1;
            AtualizaLabelRodadaPanelPlacar();
            this.btnProximaRodadaPlacar.Enabled = true;
            this.btnRodadaAnteriorPlacar.Enabled = false;

            this.ShowPanel(this.pnlCadastrarPlacar);
        }

        private void AtualizaLabelRodadaPanelPlacar()
        {
            this.lblRodadaPlacar.Text = "Rodada " + m_contadorRodada;
        }

        private void btnFecharPlacar_Click(object sender, EventArgs e)
        {
            this.pnlCadastrarPlacar.Visible = false;
        }

        private void btnProximaRodadaPlacar_Click(object sender, EventArgs e)
        {
            this.m_contadorRodada++;
            this.btnRodadaAnteriorPlacar.Enabled = true;

            if (CampeonatoCarregado.EstiloCampeonato == TipoCampeonato.PONTOS_CORRIDOS_DOIS_TURNOS_COM_FINAIS ||
                CampeonatoCarregado.EstiloCampeonato == TipoCampeonato.PONTOS_CORRIDOS_UM_TURNO_COM_FINAIS)
            {
                if (m_contadorRodada == (CampeonatoCarregado.QuantidadeRodadas + CampeonatoCarregado.QtdeJogosFinais))
                {
                    this.btnProximaRodadaPlacar.Enabled = false;
                }
            }
            else
            {
                if (m_contadorRodada == CampeonatoCarregado.QuantidadeRodadas)
                {
                    this.btnProximaRodadaPlacar.Enabled = false;
                }
            }

            this.AtualizaLabelRodadaPanelPlacar();           
            this.srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, m_contadorRodada);
            this.srcPartidasCadastradas.ResetBindings(false);
        }

        private void btnRodadaAnteriorPlacar_Click(object sender, EventArgs e)
        {
            this.m_contadorRodada--;
            this.btnProximaRodadaPlacar.Enabled = true;

            if (m_contadorRodada == 1)
            {
                this.btnRodadaAnteriorPlacar.Enabled = false;
            }

            this.AtualizaLabelRodadaPanelPlacar();
            this.srcPartidasCadastradas.DataSource = PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado,
                                                                                        m_contadorRodada);
            this.srcPartidasCadastradas.ResetBindings(false);
        }

        private void dgvPlacares_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                var partidas = (IEnumerable<Partida>) this.srcPartidasCadastradas.DataSource;
                var frmResultado = new FrmRegistraResultado(partidas.ElementAt(e.RowIndex));
                if (frmResultado.ShowDialog() != DialogResult.Cancel)
                {
                    PartidaBLL.RegistraPlacar(CampeonatoCarregado, frmResultado.PartidaModificada);
                    this.srcPartidasCadastradas.ResetBindings(false);
                }
            }
        }

        private void dgvPlacares_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            foreach (DataGridViewRow row in dgvPlacares.Rows)
            {   
                row.Cells["X"].Value = "x";
            }
        }

        #endregion

        #region Panel Ranking

        private void mnuItemExibirRanking_Click(object sender, EventArgs e)
        {
            this.srcJogadoresRanking.DataSource = CampeonatoBLL.BuscarRankingCampeonato(CampeonatoCarregado);
            this.srcJogadoresRanking.ResetBindings(false);
            this.ShowPanel(this.pnlRanking);
        }

        private void dgvRanking_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (this.srcJogadoresRanking != null && this.srcJogadoresRanking.DataSource != null && this.srcJogadoresRanking.DataSource is IList<Jogador>)
            {
                int pos = 1;
                IList<Jogador> lstRanking = (IList<Jogador>)this.srcJogadoresRanking.DataSource;
                foreach (DataGridViewRow row in dgvRanking.Rows)
                {
                    Pontuacao p = lstRanking[pos - 1].Pontos;
                    row.Cells["Posicao"].Value = pos++;
                    row.Cells["NumJogos"].Value = p.QtdeJogos;
                    row.Cells["Pontos"].Value = p.TotalPontos;
                    row.Cells["NumVitorias"].Value = p.NumVitorias;
                    row.Cells["SaldoGols"].Value = p.SaldoDeGols;
                    row.Cells["GolsPro"].Value = p.GolsPro;
                    row.Cells["GolsContra"].Value = p.GolsContra;
                    row.Cells["NumEmpates"].Value = p.NumEmpates;
                    row.Cells["NumDerrotas"].Value = p.NumDerrotas;
                    row.Cells["Aproveitamento"].Value = p.Aproveitamento.ToString("P");
                }
            }
        }

        private void btnFechar_Click(object sender, EventArgs e)
        {
            this.pnlRanking.Visible = false;
        }

        #endregion

        #region Menus

        private void mnuItemNovoCampeonato_Click(object sender, EventArgs e)
        {
            ShowPanel(this.pnlCadastroCampeonato);
            CampeonatoCarregado = null;
            AtualizaLabelCampeonatoCarregado();
        }

        private void mnuItemCarregarCampeonato_Click(object sender, EventArgs e)
        {
            this.srcCampeonatosCarregados.DataSource = CampeonatoBLL.BuscarTodosCampeonatos();
            ShowPanel(this.pnlSelecionaCampeonato);
            CampeonatoCarregado = null;
            lblCampeonatoCarregado.Text = "Nenhum campeonato carregado";
            BloqueiaMenusCadastro();
        }

        private void mnuItemFinalizarCampeonato_Click(object sender, EventArgs e)
        {
            BloqueiaMenusCadastro();
        }

        private void mnuItemCadastrarGrupos_Click(object sender, EventArgs e)
        {

        }

        private void mnuItemCadastrarParticipantes_Click(object sender, EventArgs e)
        {
            this.CarregaGridJogadoresParticipantes();
            ShowPanel(this.pnlCadastrarParticipantes);
        }

        private void mnuItemCadastrarPartida_Click(object sender, EventArgs e)
        {
            this.CarregaGridPartidasParaCadastro();
            ShowPanel(this.pnlCadastroPartidas);
            isFinais = false;
        }

        private void mnuItemCadastrarPartidaFinais_Click(object sender, EventArgs e)
        {
            if (CampeonatoCarregado.EstiloCampeonato == TipoCampeonato.PONTOS_CORRIDOS_DOIS_TURNOS_COM_FINAIS ||
                CampeonatoCarregado.EstiloCampeonato == TipoCampeonato.PONTOS_CORRIDOS_UM_TURNO_COM_FINAIS)
            {
                this.m_contadorRodada = CampeonatoCarregado.QuantidadeRodadas + 1;
                IList<Partida> partidas =
                    PartidaBLL.BuscarPartidasPorRodada(CampeonatoCarregado, m_contadorRodada);

                this.lblStatusRodada.Text = this.GetTipoCampeonatoString(CampeonatoCarregado.QtdeTimesClassificadosFinais);
                this.lblTituloRodada.Text = this.lblStatusRodada.Text;
                this.btnRodadaAnterior.Enabled = false;
                this.btnRodadaProximo.Enabled = false;
                isFinais = true;

                if (partidas == null || partidas.Count == 0)
                {
                    //Partidas finais ainda não cadastradas
                    partidas = PartidaBLL.BuscarJogosFinais(CampeonatoCarregado);
                    if (partidas == null || partidas.Count == 0)
                    {
                        MessageBox.Show("Este campeonato ainda não terminou.");
                        return;
                    }

                    this.btnAdicionarPartida.Enabled = true;
                }
                else
                {
                    this.btnAdicionarPartida.Enabled = false;
                }

                this.srcPartidasCadastradas.DataSource = partidas;
                this.srcPartidasCadastradas.ResetBindings(false);
                this.ShowPanel(this.pnlCadastroPartidas);
            }
            else
            {
                MessageBox.Show("Este campeonato não tem finais.");
            }
        }
        #endregion

        #region Eventos do Form

        private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            //DBHelper.Instance.DataBase.Close();
        }

        #endregion

        private void AdicionaPanelsNaLista()
        {
            m_panelsDoForm.Add(this.pnlCadastroCampeonato);
            m_panelsDoForm.Add(this.pnlSelecionaCampeonato);
            m_panelsDoForm.Add(this.pnlCadastrarParticipantes);
            m_panelsDoForm.Add(this.pnlCadastroPartidas);
            m_panelsDoForm.Add(this.pnlCadastrarPlacar);
            m_panelsDoForm.Add(this.pnlRanking);
        }

        private void ShowPanel(Panel _panel)
        {
            _panel.Visible = true;
            foreach (var panel in m_panelsDoForm)
            {
                if (_panel != panel)
                {
                    panel.Visible = false;
                }
            }
        }

        private void LiberaMenusCadastro()
        {
            this.mnuItemCadastrarParticipantes.Enabled = 
                this.mnuItemFinalizarCampeonato.Enabled = 
                this.mnuItemCadastrarGrupos.Enabled = true;

            this.mnuItemPartidas.Enabled = true;
        }

        private void BloqueiaMenusCadastro()
        {
            this.mnuItemCadastrarParticipantes.Enabled =
                this.mnuItemFinalizarCampeonato.Enabled =
                this.mnuItemCadastrarGrupos.Enabled = false;

            this.mnuItemPartidas.Enabled = false;
        }

        private void rdbPontosCorridosUmTurnoFinais_CheckedChanged(object sender, EventArgs e)
        {
            this.gpbTipoFinais.Visible = rdbPontosCorridosUmTurnoFinais.Checked;
            this.chkCriterioRebaixamento.Visible = rdbPontosCorridosUmTurnoFinais.Checked;
        }

        private void rdbPontosCorridosDoisTurnoFinais_CheckedChanged(object sender, EventArgs e)
        {
            this.gpbTipoFinais.Visible = rdbPontosCorridosDoisTurnoFinais.Checked;
            this.chkCriterioRebaixamento.Visible = rdbPontosCorridosDoisTurnoFinais.Checked;
        }

        private void chkCriterioRebaixamento_CheckedChanged(object sender, EventArgs e)
        {
            this.lblQtdeTimesRebaixados.Visible = this.chkCriterioRebaixamento.Checked;
            this.tbxQtdeTimesRebaixados.Visible = this.chkCriterioRebaixamento.Checked;
        }

        private void rdbPontosCorridosUmTurno_CheckedChanged(object sender, EventArgs e)
        {
            this.chkCriterioRebaixamento.Visible = this.rdbPontosCorridosUmTurno.Checked;
        }

        private void rdbPontosCorridosDoisTurnos_CheckedChanged(object sender, EventArgs e)
        {
            this.chkCriterioRebaixamento.Visible = this.rdbPontosCorridosDoisTurnos.Checked;
        }

        private string GetTipoCampeonatoString(TipoFinaisPontosCorridos tipoFinaisPontosCorridos)
        {
            switch (tipoFinaisPontosCorridos)
            {
                case TipoFinaisPontosCorridos.FINAL:
                    return "Final";
                case TipoFinaisPontosCorridos.SEMI:
                    return "Semi-final";
                case TipoFinaisPontosCorridos.QUARTAS:
                    return "Quartas-de-final";
                case TipoFinaisPontosCorridos.OITAVAS:
                    return "Oitavas-de-final";
                default:
                    return "";
            }
        }

        private void mnuItemGerarPartidas_Click(object sender, EventArgs e)
        {
            this.mnuItemGerarPartidas.Enabled = false;
            ThreadPool.QueueUserWorkItem(
                delegate(object obj)
                {
                    PartidaBLL.CadastraPartidasAleatorias(this.CampeonatoCarregado);
                    MessageBox.Show("Partidas cadastradas com sucesso.");
                });
        }
    }
}
